#include<iostream>
#include<stack>
#include<queue>
#include<vector>
#include<list>
using namespace std;

#include"stack.h"
#include"queue.h"

//int main()
//{
//	zt::stack<int, vector<int>> s;
//	//zt::stack<int, list<int>> s;
//	//zt::stack<int, deque<int>> s;
//	//zt::stack<int> s;
//
//	s.push(1);
//	s.push(2);
//	s.push(3);
//	s.push(4);
//
//	while (!s.empty())
//	{
//		cout << s.top() << " ";
//		s.pop();
//	}
//	cout << endl;
//
//	return 0;
//}


//int main()
//{
//	//zt::queue<int> q;
//	// 
//	//zt::queue<int, vector<int>> q;
//	zt::queue<int, list<int>> q;
//
//	q.push(1);
//	q.push(2);
//	q.push(3);
//	q.push(4);
//
//	while (!q.empty())
//	{
//		cout << q.front() << " ";
//		q.pop();
//	}
//	cout << endl;
//
//	return 0;
//}
namespace zt
{
	template<class T>
	class less
	{
	public:
		bool operator()(const T& x, const T& y)
		{
			return x < y;
		}
	};

	template<class T>
	class greater
	{
	public:
		bool operator()(const T& x, const T& y)
		{
			return x > y;
		}
	};
}

template<class Comapre>
class A
{
public:
	void func(int xx, int yy)
	{
		Comapre com;
		cout << "void func(int xx, int yy)" << com(xx, yy) << endl;;
	}
};

int main()
{
	A<zt::less<int>> aa1;
	aa1.func(1, 2);

	A<zt::greater<int>> aa2;
	aa2.func(1, 2);

	/*zt::less lessFunc;
	cout << lessFunc(1, 2) << endl;
	cout << lessFunc.operator()(1, 2) << endl;*/
	//zt::priority_queue<int> pq;
	////priority_queue<int, vector<int>, greater<int>> pq;

	//pq.push(1);
	//pq.push(2);
	//pq.push(6);
	//pq.push(2);
	//pq.push(3);

	//while (!pq.empty())
	//{
	//	cout << pq.top() << " ";
	//	pq.pop();
	//}
	//cout << endl;

	return 0;
}


//bool lessfc(int x, int y)
//{
//	return x < y;
//}
//
//bool  greaterfc(int x, int y)
//{
//	return x > y;
//}
//
//class A
//{
//public:
//	A(bool(*pf)(int, int))
//		:_pf(pf)
//	{}
//
//	void func(int xx, int yy)
//	{
//		cout << "void func(int xx, int yy)" << _pf(xx, yy) << endl;;
//	}
//
//	bool(*_pf)(int, int);
//};
//
//int main()
//{
//	A aa1(lessfc);
//	aa1.func(1, 2);
//
//	A aa2(greaterfc);
//	aa2.func(1, 2);
//}